﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using Microsoft.Office.Interop.Excel;

namespace RESP_IIWaterAssessment
{
    public partial class IndikatorFormReport : Form
    {
        public IndikatorFormReport()
        {
            InitializeComponent();
        }

        int regID, year, month;

        private void IndikatorFormReport_Load(object sender, EventArgs e)
        {
            cbRegion.SelectedIndexChanged -= cbRegion_SelectedIndexChanged;
            cbRegion.DataSource = UtilClass.FillCBRegions();
            cbRegion.DisplayMember = "Name";
            cbRegion.ValueMember = "ID";
            cbRegion.SelectedIndex = -1;
            cbRegion.SelectedIndexChanged += new EventHandler(cbRegion_SelectedIndexChanged);


            string[] month;
            if (InformationClass.Lang)
                month = new string[] { "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" };
            else
                month = new string[] { "Январ", "Феврал", "Март", "Апрел", "Май", "Июн", "Июл", "Август", "Сентябр", "Октябр", "Ноябр", "Декабр" };

            for (int i = 1; i <= 12; i++)
            {
                var m = new
                {
                    ID = i,
                    Name = month[i - 1]
                };
                cbMonth.Items.Add(m);
            }
            cbMonth.DisplayMember = "Name";
            cbMonth.ValueMember = "ID";

            for (int i = 1991; i < 2100; i++)
            {
                cbYear.Items.Add(i);
            }
            cbMonth.SelectedIndex = cbMonth.FindStringExact(month[DateTime.Now.Month - 1]);
            cbYear.SelectedIndex = cbYear.FindStringExact(DateTime.Now.Year.ToString());
            this.year = Convert.ToInt32(cbYear.Text);
            this.month = cbMonth.SelectedIndex + 1;
        }

        private void cbRegion_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbRegion.SelectedIndex >= 0)
            {
                regID = Convert.ToInt32(cbRegion.SelectedValue);
            }
            else
                regID = 0;
        }

        private void cbYear_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (regID > 0 && cbYear.SelectedIndex >= 0)
            {
                year = Convert.ToInt32(cbYear.Text);
            }
        }

        private void cbMonth_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (regID > 0 && cbMonth.SelectedIndex >= 0)
            {
                month = cbMonth.SelectedIndex + 1;
            }
        }

        private void buttonShow_Click(object sender, EventArgs e)
        {
            dgvIndikatorReport.Columns.Clear();

            if (chbRegion.Checked && chbMonth.Checked)
            {
                SqlConnection con = new SqlConnection(DBClass.ConStr);
                SqlCommand com = new SqlCommand("IndicatorReport", con);
                com.CommandType = CommandType.StoredProcedure;

                com.Parameters.Add("@RegionID", SqlDbType.Int).IsNullable = true;
                com.Parameters.Add("@Date", SqlDbType.SmallDateTime).IsNullable = true;

                if (chbRegion.Checked && regID > 0)
                    com.Parameters["@RegionID"].Value = regID;
                else
                    com.Parameters["@RegionID"].Value = DBNull.Value;

                if (chbMonth.Checked && year > 0 && month > 0)
                    com.Parameters["@Date"].Value = new DateTime(year, month, 1);
                else
                    com.Parameters["@Date"].Value = DBNull.Value;

                System.Data.DataTable tab = new System.Data.DataTable("Rep");
                SqlDataAdapter adapter = new SqlDataAdapter(com);
                try
                {
                    adapter.Fill(tab);
                    dgvIndikatorReport.DataSource = tab;
                    if (InformationClass.Lang)
                    {
                        dgvIndikatorReport.Columns["Indicator"].HeaderText = "Индикатор";
                        dgvIndikatorReport.Columns["IndicatorValue"].HeaderText = "Значение";
                    }
                    else
                    {
                        dgvIndikatorReport.Columns["Indicator"].HeaderText = "Кўрсаткичлар";
                        dgvIndikatorReport.Columns["IndicatorValue"].HeaderText = "Қиймати";
                    }

                    dgvIndikatorReport.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
                    dgvIndikatorReport.AutoResizeColumns();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(msgClass.msgNoData, msgClass.msgAchtung);
                    dgvIndikatorReport.DataSource = null;
                    dgvIndikatorReport.Columns.Clear();
                }

            }
            else
            {
                MessageBox.Show("Необходимо выбрать меясц и район. Проверьте критерии запроса.");
            }

            
        }

        private void dgvIndikatorReport_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.ColumnIndex.Equals(dgvIndikatorReport.Columns["IndicatorValue"].Index) && e.Value != null)
            {
                if (dgvIndikatorReport["Indicator", e.RowIndex].Value.ToString().Equals("FactPlanWaterSupply") ||
                    dgvIndikatorReport["Indicator", e.RowIndex].Value.ToString().Equals("ProductivityCotton") ||
                    dgvIndikatorReport["Indicator", e.RowIndex].Value.ToString().Equals("CollectionPercent") ||
                    dgvIndikatorReport["Indicator", e.RowIndex].Value.ToString().Equals("Productivity"))
                {
                    decimal d;
                    e.Value.ToString().GetDecimalOrDefault(out d);
                    e.Value = d.ToString("N2");
                }
            }

            if (dgvIndikatorReport.Columns.Contains("Indicator"))
            {
                if (e.ColumnIndex.Equals(dgvIndikatorReport.Columns["Indicator"].Index) && e.Value != null)
                {
                    switch (e.Value.ToString())
                    {
                        case "AVPCount":
                            e.Value = InformationClass.Lang ? "Количество АВП" : "СИУлар сони";
                            break;
                        case "PersonalQuantity":
                            e.Value = InformationClass.Lang ? "Число персонала БУИС/УИС и АВП, прошедшее специальное обучение" : "Махсус таълим олган ИТҲБ/ИТБ ва СИУ ходимлари сони";
                            break;
                        case "OffFarmQuantity":
                            e.Value = InformationClass.Lang ? "Количество межхозяйственых систем, утвержденных для восстановления, исходя из ТЭО и документов по оценочной стоимости компонента" : "Техник-иқтисодий асослаш ҳамда компонентни баҳолаш  ҳужжатларидан келиб чиққан ҳолда қайта тикланиши тасдиқланган хўжаликлараро тизимлар сони";
                            break;
                        case "InterFarmQuantity":
                            e.Value = InformationClass.Lang ? "Количество внутрихозяйственных систем, утвержденных для восстановления, исходя из ТЭО и документов по оценочной стоимости компонента" : "Техник-иқтисодий асослаш ҳамда компонентни баҳолаш  ҳужжатларидан келиб чиққан ҳолда қайта тикланиши тасдиқланган хўжаликлараро тизимлар сони";
                            break;
                        case "OffFarmArea":
                            e.Value = InformationClass.Lang ? "Подвешенная площадь, покрытая восстановленными межхозяйствеными системами (%)" : "Қайта тикланган хўжаликлараро тизимлар билан қопланган майдонлар нисбати (%)";
                            break;
                        case "InterFarmArea":
                            e.Value = InformationClass.Lang ? "Подвешенная площадь и количество АВП, получающих пользу от восстановленных внутрихозяйственных систем (%)" : "Қайта тикланган хўжаликлараро тизимлардан фойдалнувчи  майдонлар нисбати  (%) ва СИУлар сони";
                            break;

                        case "Low":
                            e.Value = InformationClass.Lang ? "Степень засоленности низкая" : "Тупроқ шўрланиши даражаси бўйича (яхши)";
                            break;
                        case "Average":
                            e.Value = InformationClass.Lang ? "Степень засоленности средняя" : "Тупроқ шўрланиши даражаси бўйича (қониқарли)";
                            break;
                        case "High":
                            e.Value = InformationClass.Lang ? "Степень засоленности высокая" : "Тупроқ шўрланиши даражаси бўйича (қониқарсиз)";
                            break;
                        case "GW01":
                            e.Value = InformationClass.Lang ? "Уровни залегания  грунтовых вод 0-1м" : "Ер ости сувлари жойлашиши бўйича 0-1 м";
                            break;
                        case "GW12":
                            e.Value = InformationClass.Lang ? "Уровни залегания  грунтовых вод 1-2м" : "Ер ости сувлари жойлашиши бўйича 1-2 м";
                            break;
                        case "GW23":
                            e.Value = InformationClass.Lang ? "Уровни залегания  грунтовых вод 2-3м" : "Ер ости сувлари жойлашиши бўйича 1-2 м";
                            break;
                        case "GW35":
                            e.Value = InformationClass.Lang ? "Уровни залегания  грунтовых вод 3-5м" : "Ер ости сувлари жойлашиши бўйича 1-2 м";
                            break;
                        case "GW5":
                            e.Value = InformationClass.Lang ? "Уровни залегания  грунтовых вод >5м" : "Ер ости сувлари жойлашиши бўйича >5 м";
                            break;
                        case "SGW01":
                            e.Value = InformationClass.Lang ? "Минерализации грунтовых вод 0-1м" : "Ер ости сувлари минераллашуви 0-1м";
                            break;
                        case "SGW13":
                            e.Value = InformationClass.Lang ? "Минерализации грунтовых вод 1-3м" : "Ер ости сувлари минераллашуви 1-3м";
                            break;
                        case "SGW35":
                            e.Value = InformationClass.Lang ? "Минерализации грунтовых вод 3-5м" : "Ер ости сувлари минераллашуви 3-5м";
                            break;
                        case "SGW510":
                            e.Value = InformationClass.Lang ? "Минерализации грунтовых вод 5-10м" : "Ер ости сувлари минераллашуви 5-10м";
                            break;
                        case "SGW10":
                            e.Value = InformationClass.Lang ? "Минерализации грунтовых вод >10м" : "Ер ости сувлари минераллашуви >10м";
                            break;

                        case "MemberQuantity":
                            e.Value = InformationClass.Lang ? "Вовлечение членов АВП в работу АВП" : "СИУ ходимларини СИУ ишига жалб қилиш";
                            break;

                        case "ProductivityCulture":
                            e.Value = InformationClass.Lang ? "Динамики продуктивности сельхозкультур на восстановленной площади" : "Қайта тикланган майдонда қишлоқ хўжалик экинлари унумдорлиги динамикаси";
                            break;
                        case "ProductivityCotton":
                            e.Value = InformationClass.Lang ? "Изменения (в %) в урожайности хлопка" : "СИУ миқёсида пахта ва буғдой унумдорлигининг ўзгариши (% да) пахта";
                            break;
                        case "ProductivitySeed":
                            e.Value = InformationClass.Lang ? "Изменения (в %) в урожайности пшеницы" : "СИУ миқёсида пахта ва буғдой унумдорлигининг ўзгариши (% да) буғдой";
                            break;

                        case "Productivity":
                            e.Value = InformationClass.Lang ? "Изменения (в %) в продуктивности воды для хлопка и пшеницы на уровне АВП" : "СИУ миқёсида пахта ва буғдой учун сув унумдорлигининг ўзгариши (% да)";
                            break;
                        case "FullIncome":
                            e.Value = InformationClass.Lang ? "Динамика платы за услуги орошения" : "Суғориш хизматлари учун тўлов (СХТ) динамикаси";
                            break;
                        case "CollectionPercent":
                            e.Value = InformationClass.Lang ? "Изменения (в %) в собираемости взносов" : "СИУ миқёсида бадаллар йиғими ўзгариши (% да)";
                            break;
                        case "StaffQuantity":
                            e.Value = InformationClass.Lang ? "Планируемое по штату кол-во работников/специалистов АВП." : "Штат бўйича режалаштирилган ҳамда амалда ишлаётган СИУ ходимлари/мутахассислари режадаги";
                            break;
                        case "MemberQuantity1":
                            e.Value = InformationClass.Lang ? "Фактически по штату кол-во работников/специалистов АВП." : "Штат бўйича режалаштирилган ҳамда амалда ишлаётган СИУ ходимлари/мутахассислари амалдаги";
                            break;
                        case "ImplementationOFP":
                            e.Value = InformationClass.Lang ? "Мониторинг составления и реализации ОФП" : "ОМР тузиш ва амалга ошириш мониторинги";
                            break;
                        case "FarmersWithTrays":
                            e.Value = InformationClass.Lang ? "Число новых фермеров в АВП, которые построили водоизмерительные лотки за свои собственные ресурсы; в % от общего числа фермеров" : "СИУда ўз ҳисобидан сув ўлчаш лотокларини қурдирган   янги фермерлар сони; фермерлар умумий сонига нисбатан %да";
                            break;
                        case "FarmersOverQuota":
                            e.Value = InformationClass.Lang ? "% фермеров, которые превысили квоту на хлопок и пшеницу на 10%" : "Пахта ва буғдойга белгиланган меъёрни 10%га оширган фермерлар, %да";
                            break;
                        case "SatisfiedWaterUsers":
                            e.Value = InformationClass.Lang ? "Водопотребители удовлетворены работой АВП " : "СИУ фаолиятида қониқиш ҳосил қилган фермерлар";
                            break;
                        case "AverageIncome":
                            e.Value = InformationClass.Lang ? "Средний доход фермеров на уровне АВП (% повышения)" : "СИУ миқёсида фермерларнинг ўртача даромади, (ўсиш %и)";
                            break;
                        case "FactPlanWaterSupply":
                            e.Value = InformationClass.Lang ? "Планируемое и фактическое водопотребление в АВП (%)" : "СИУларда сув истеъмолининг режадаги ва амалдаги миқдори (%)";
                            break;
                        default:
                            e.Value = "unknown data";
                            break;
                    }


                }
            }
        }

        Sheets excelsheets;
        Worksheet excelworksheet;
        Microsoft.Office.Interop.Excel.Application excelapp;
        Workbook excelappworkbook;
        Workbooks excelappworkbooks;

        private void buttonExcel_Click(object sender, EventArgs e)
        {
            if (dgvIndikatorReport.RowCount > 0)
            {
                MessageBox.Show(msgClass.msgWaiting);
                GetReport();
                
                excelworksheet.Select(1);
                excelapp.Visible = true;
            }

        }

        private void GetReport()
        {
            excelapp = new Microsoft.Office.Interop.Excel.Application();
            excelapp.SheetsInNewWorkbook = 1;
            if (InformationClass.Lang)
                excelapp.Workbooks.Open(System.Windows.Forms.Application.StartupPath + @"\Templates\i5r7.xls", false, true, Type.Missing, Type.Missing, Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            else
                excelapp.Workbooks.Open(System.Windows.Forms.Application.StartupPath + @"\Templates\i5r7uz.xls", false, true, Type.Missing, Type.Missing, Type.Missing, true, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

            excelappworkbook = excelapp.Workbooks[1];
            excelsheets = excelappworkbook.Worksheets;// .Worksheets[0]; //Sheets 
            excelworksheet = (Microsoft.Office.Interop.Excel.Worksheet)excelsheets.get_Item(1);

            excelworksheet.Cells.NumberFormat = "@";

            excelworksheet.Cells[4, 3] = cbRegion.Text;
            excelworksheet.Cells[5, 3] = cbMonth.Text + " " + cbYear.Text;

            for (int i = 0; i < dgvIndikatorReport.RowCount; i++)
            {
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("AVPCount"))
                {
                    excelworksheet.Cells[6, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("PersonalQuantity"))
                {
                    excelworksheet.Cells[8, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("OffFarmQuantity"))
                {
                    excelworksheet.Cells[9, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("InterFarmQuantity"))
                {
                    excelworksheet.Cells[10, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("OffFarmArea"))
                {
                    excelworksheet.Cells[11, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("InterFarmArea"))
                {
                    excelworksheet.Cells[12, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("FactPlanWaterSupply"))
                {
                    excelworksheet.Cells[13, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("Low"))
                {
                    excelworksheet.Cells[14, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("Average"))
                {
                    excelworksheet.Cells[15, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("High"))
                {
                    excelworksheet.Cells[16, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("GW01"))
                {
                    excelworksheet.Cells[17, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("GW12"))
                {
                    excelworksheet.Cells[18, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("GW23"))
                {
                    excelworksheet.Cells[19, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("GW35"))
                {
                    excelworksheet.Cells[20, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("GW5"))
                {
                    excelworksheet.Cells[21, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("SGW01"))
                {
                    excelworksheet.Cells[22, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("SGW13"))
                {
                    excelworksheet.Cells[23, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("SGW35"))
                {
                    excelworksheet.Cells[24, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("SGW510"))
                {
                    excelworksheet.Cells[25, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("SGW10"))
                {
                    excelworksheet.Cells[26, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("MemberQuantity"))
                {
                    excelworksheet.Cells[29, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("ProductivityCulture"))
                {
                    excelworksheet.Cells[30, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("ProductivityCotton"))
                {
                    excelworksheet.Cells[31, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("ProductivitySeed"))
                {
                    excelworksheet.Cells[32, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("Productivity"))
                {
                    excelworksheet.Cells[33, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("FullIncome"))
                {
                    excelworksheet.Cells[34, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("CollectionPercent"))
                {
                    excelworksheet.Cells[35, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("StaffQuantity"))
                {
                    excelworksheet.Cells[40, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("MemberQuantity1"))
                {
                    excelworksheet.Cells[41, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("ImplementationOFP"))
                {
                    excelworksheet.Cells[42, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("FarmersWithTrays"))
                {
                    excelworksheet.Cells[43, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("FarmersOverQuota"))
                {
                    excelworksheet.Cells[44, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("SatisfiedWaterUsers"))
                {
                    excelworksheet.Cells[45, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
                if (dgvIndikatorReport[0, i].Value.ToString().Equals("AverageIncome"))
                {
                    excelworksheet.Cells[46, 6] = dgvIndikatorReport[1, i].FormattedValue;
                    continue;
                }
            }

            excelworksheet.Columns.AutoFit();
            excelworksheet.Rows.AutoFit();
        }

        private void buttonPrint_Click(object sender, EventArgs e)
        {
            if (dgvIndikatorReport.RowCount > 0)
                PrintDGV.Print_DataGridView(dgvIndikatorReport);
        }
    }
}
